import {createRouter, createWebHistory} from 'vue-router'
import {useUserStore} from '@/stores'

// 进度条
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
// 配置进度条，不显示环形进度图标
NProgress.configure({
  showSpinner: false
})
// 创建路由实例有creaRouter实现
// history模式： createWebHistory hash模式：createWebHashHistory
// 默认参数 '/' 路由的基准路径
const router = createRouter({
  // import.meta 是JavaScript模块暴露的描述模块的 信息对象
  // env.BASE_URL 是Vite环境变量：https://cn.vite.dev    来源于vite.config.ts的base选项的值
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: '/login',
      component: () => import('@/views/Login/index.vue'),
      meta: { title: '登录' }
    },

    {
      path: '/',
      redirect: '/home',
      component: () => import('@/views/Layout/index.vue'),
      children: [
        {
          path: '/home',
          component: () => import('@/views/Home/index.vue'),
          meta: { title: '首页' }
        },
        {
          path: '/article',
          component: () => import('@/views/Article/index.vue'),
          meta: { title: '健康百科' }
        },
        {
          path: '/user',
          component: () => import('@/views/User/index.vue'),
          meta: { title: '消息中心' }
        },
        {
          path: '/notify',
          component: () => import('@/views/Notify/index.vue'),
          meta: { title: '我的' }
        }
      ]
    },
    {
      path: '/user/patient',
      component: () => import('@/views/User/PatientPage.vue'),
      meta: { title: '家庭档案' }
    }
  ]
})

// 全局前置导航守卫
router.beforeEach((to) => {
  // next 现在可选，next() 放行 next('/login') 跳转指定路由（重定向）
  //   ----------------------现在-------------------
  // 返回 false 取消； 返回 true | undefined 放行；  返回 路由地址（对象格式）重定向
  NProgress.start() // 进度条开始
  // 1. 获取store实例
  const store = useUserStore()
  // 2. 白名单
  const whiteList = ['/login']
  // 3. 如果没有token并且不在白名单，重定向至登录
  if (!store.user?.token && !whiteList.includes(to.path)) return '/login'
})

// 路由配置元信息meta中定义标题，路由全局后置守卫设置标题给页面，扩展元信息类型
router.afterEach((to) => {
  document.title = `${to.meta.title + '-' || ''}优医问诊`
  NProgress.done() // 进度条结束
})
export default router

// 进度条安装命令：pnpm add nprogress   pnpm add @types/nprogress -D
// NProgress.start() // 进度条开始 NProgress.done() // 进度条结束
